//
//  P1443horse.cpp
//  Algorithm
//
//  Created by 刘锦程 on 2023/9/7.
//
#include<cstdio>
#include <stdio.h>
#include<iostream>
#include<queue>
using namespace std;
int m,n,x,y;
int book[403][403],ans[403][403];
int dir[8][2]={{-2,1},{2,-1},{2,1},{-2,-1},{-1,2},{1,-2},{1,2},{-1,-2}};
struct node{
    int x;
    int y;
    node(int a,int b){
        x=a;
        y=b;
    }
};
queue<node> q;
void input(){
    cin>>n>>m;
    cin>>x>>y;
}
void ansprint(){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(ans[i][j]==0&&(i!=x||j!=y)){
                printf("%-5d",-1);
                continue;
            }
            printf("%-5d",ans[i][j]);
        }
        printf("\n");
    }
}
void bfs(){
    int xnow,ynow;
    q.push(node(x,y));
    ans[x][y]=0;
    book[x][y]=1;
    while(!q.empty()){
        xnow=q.front().x;
        ynow=q.front().y;
        q.pop();
        for(int i=0;i<8;i++){
            int x0=xnow+dir[i][0];
            int y0=ynow+dir[i][1];
            if(x0<=n&&x0>=1&&y0<=m&&y0>=1&&!book[x0][y0]){
              //  if(ans[x0][y0]>1+ans[xnow][ynow]){
                    ans[x0][y0]=1+ans[xnow][ynow];
                    book[x0][y0]=1;
                    q.push(node(x0,y0));
                //}
            }
        }
       
    }
}
void P1443ans(){
    input();
    bfs();
    ansprint();
    
}
